home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-06-03 | 5.9 KB | 223 lines |
- 10 ' theorectically the worst case to discover baud/parity is six CRs
- 20 DEF FN TI! = CSNG( FIX(( VAL( MID$( TIME$ ,1,2)) * 60 * 60) + ( VAL( MID$( TIME$ ,4,2)) * 60) + ( VAL( MID$( TIME$ ,7,2)) * 1)))
- 30 A! = FRE("A")
- 40 ON ERROR GOTO 1720
- 50 TIME.OUT! = 3 * 60
- 60 BIT.8 = 0
- 70 OPEN "COM1:300,E,7,1,RS,CD1,DS" AS #3
- 80 GOTO 70
- 90 OPEN "COM1:300,E,7,1,RS,CD,DS" AS #3
- 100 MODTR = INP(&H3FE)
- 110 OUT &H3FE,&H0
- 120 OUT &H3FE,MODTR
- 130 PRINT #3,"ATZ"
- 140 FOR LOOP = 1 TO 3
- 150 PRINT #3, CHR$(13);
- 160 GOSUB 2040
- 170 NEXT
- 180 PRINT #3,"ATS2=128";
- 190 PRINT #3,"M0Q1S4=13S5=130S10=20S0=255S1?"
- 200 INPUT #3,X$
- 210 GOSUB 730
- 220 WHILE ( INP(&H3FE) AND &H40) = 0 ' wait for ring indicator bit to set TRUE
- 230 X$ = INKEY$
- 240 IF X$ = CHR$(27) THEN 250 ELSE 300 ' sysop escape into program
- 250 TI! = FN TI!
- 260 GOSUB 1920
- 270 PRT = 0
- 280 LOCAL = - 1
- 290 GOTO 2100
- 300 WEND
- 310 CLOSE #3
- 320 OPEN "COM1:300,E,7,1,RS,CD,DS" AS #3
- 330 PRINT #3,"ATQ1E1S0=0A"
- 340 CLOSE #3
- 350 OPEN "COM1:300,N,8,1,CD,DS,CS" AS #3
- 360 Q = &H180
- 370 QQ = &H60
- 380 QQQ = &H30 '****** test value for 2400 baud
- 390 IF PRT THEN LOCATE,,1
- 400 FOR JJ = 1 TO 600
- 410 SOUND 32767,1
- 420 IF INP(&H3FE) > 127 THEN 450
- 430 NEXT JJ
- 440 GOTO 1880
- 450 GOSUB 1960
- 460 GOSUB 2040
- 470 OUT &H3FB,&H3
- 480 BIT.8 = - 1
- 490 IF INP(&H3FE) < 128 THEN 1880 ELSE IF EOF(3) THEN 490
- 500 A = 0
- 510 A = ASC( INPUT$( LOC(3),3))
- 520 IF A = 13 THEN 600 ' got everything set because c/r is normal (No parity)
- 530 IF A = 141 THEN OUT &H3FB,&H1A : BIT.8 = 0 : GOTO 600 'same but Even parity ( ascii 13 + 128 high bit)
- 540 SWAP Q,QQ
- 550 SWAP QQ,QQQ ' ****** set swap for 2400 baud
- 560 GOSUB 1380
- 570 OUT &H3FB,&H3
- 580 BIT.8 = - 1
- 590 GOTO 490
- 600 GOSUB 730
- 610 IF Q = &H60 THEN BPS = - 1 ELSE BPS = 0
- 620 TI! = FN TI!
- 630 PRINT #3, CHR$(10)
- 640 PRINT #3,""
- 650 IF BIT.8 THEN PARM$ = "no parity, 8 data bits, 1 stop bit" ELSE PARM$ = "even parity, 7 data bits, 1 stop bit" ' ****** test string assignment for 2400 baud <UNK! {FF00}> 6NEW<UNK! {0002}>IF Q=48 THEN BAUD$="2400 baud, " ELSE IF Q=96 THEN BAUD$ = "1200 baud, " ELSE BAUD$ = "300 baud, "
- 670 GOSUB 810
- 680 A$ = "Welcome to Terrapin Station! " + TIM$ + " " + DAT$
- 690 GOSUB 840
- 700 A$ = "Operating at " + BAUD$ + PARM$
- 710 GOSUB 840
- 720 GOTO 2100
- 730 TI$ = TIME$
- 740 MONTH$ = "JanFebMarAprMayJunJulAugSepOctNovDec"
- 750 DAT$ = MID$(MONTH$, VAL( LEFT$( DATE$ ,2)) * 3 - 2,3) + " "
- 760 DAT = INSTR( DATE$ ,"-")
- 770 DAT1 = INSTR(DAT + 1, DATE$ ,"-")
- 780 DAT$ = DAT$ + MID$( DATE$ ,DAT + 1,DAT1 - DAT - 1)
- 790 DAT = DAT1
- 800 DAT$ = DAT$ + " " + MID$( DATE$ ,DAT + 1, LEN( DATE$ ) - DAT)
- 810 TIM$ = TIME$
- 820 IF VAL( LEFT$(TIM$,2)) = 12 THEN MID$(TIM$,1,2) = RIGHT$( STR$( VAL( LEFT$( TIME$ ,2))),2) : TIM$ = LEFT$(TIM$,5) + " PM" : RETURN
- 830 IF VAL( LEFT$(TIM$,2)) > 11 THEN MID$(TIM$,1,2) = RIGHT$( STR$( VAL( LEFT$( TIME$ ,2))-12),2) : TIM$ = LEFT$(TIM$,5) + " PM" : RETURN ELSE TIM$=LEFT$(TIME$,5)+" AM":RETURN
- 840 REM *** output to modem ***
- 850 ' cr=1 no c/r; cr=2 two c/r; c/r=0 (default)
- 860 ' output is in a$
- 870 Y$ = INKEY$
- 880 IF LOCAL THEN 930
- 890 IF EOF(3) THEN GOSUB 2010 : GOTO 930
- 900 ON ERROR GOTO 1720
- 910 Y$ = INPUT$(1,#3)
- 920 IF Y$ = CHR$(19) THEN WHILE EOF(3) : GOSUB 2010 : WEND : GOTO 910
- 930 IF PRT THEN LOCATE ,,1 : PRINT A$;
- 940 IF LOCAL THEN PRINT A$; : GOTO 960
- 950 PRINT #3,A$;
- 960 IF CR = 1 THEN 1010
- 970 IF PRT AND NOT LOCAL THEN PRINT
- 980 IF LOCAL THEN PRINT : GOTO 1000
- 990 PRINT #3,""
- 1000 IF CR = 2 THEN CR = 0 : GOTO 980
- 1010 Y$ = ""
- 1020 A$ = ""
- 1030 CR = 0
- 1040 RETURN
- 1050 REM *** input from modem ***
- 1060 ' a$ is output with no c/r
- 1070 ' b$ is input
- 1080 GOSUB 2010
- 1090 A! = FRE("A")
- 1100 TOUT! = FN TI!
- 1110 B$ = ""
- 1120 CR = 1
- 1130 GOSUB 840
- 1140 IF LOCAL THEN LINE INPUT "",B$ : RETURN
- 1150 WHILE EOF(3)
- 1160 GOSUB 2010
- 1170 MMM! = FN TI! - TOUT!
- 1180 IF MMM! > TIME.OUT! THEN 1880
- 1190 Y$ = INKEY$
- 1200 IF Y$ < > "" THEN 1250
- 1210 WEND
- 1220 IF INP(&H3FE) < 128 THEN 1880
- 1230 Y$ = INPUT$(1,#3)
- 1240 IF Y$ = CHR$(127) THEN 1330
- 1250 IF Y$ = CHR$(8) OR Y$ = CHR$(27) THEN 1330
- 1260 IF Y$ < " " AND Y$ < CHR$(13) THEN 1150
- 1270 IF PRT THEN PRINT Y$;
- 1280 PRINT #3,Y$;
- 1290 IF Y$ = CHR$(13) THEN Q = LEN(B$) : RETURN
- 1300 IF LEN(B$) = > 254 THEN A$ = "String too long!" : GOSUB 840 : GOTO 1080
- 1310 B$ = B$ + Y$
- 1320 GOTO 1150
- 1330 IF LEN(B$) = 0 THEN 1150
- 1340 B$ = LEFT$(B$, LEN(B$) - 1)
- 1350 IF PRT THEN PRINT CHR$(29) + CHR$(32) + CHR$(29);
- 1360 PRINT #3, CHR$(8) + CHR$(32) + CHR$(8);
- 1370 IF Y$ = CHR$(27) THEN 1330 ELSE 1150
- 1380 R1 = INP(&H3FB)
- 1390 K1 = R1 OR 128
- 1400 OUT &H3FB,K1 ' switch DLAB (Divisor Latch) from modem io to speed register
- 1410 IF Q = 384 THEN 1450
- 1420 IF Q = 96 THEN 1480
- 1430 IF Q = 48 THEN 1510 ' ****** test value for 2400 baud
- 1440 RETURN
- 1450 OUT &H3F8,&H80
- 1460 OUT &H3F9,&H1
- 1470 GOTO 1530
- 1480 OUT &H3F8,&H60
- 1490 OUT &H3F9,&H0
- 1500 GOTO 1530
- 1510 OUT &H3F8,&H30 ' ****** test statement for 2400 baud
- 1520 OUT &H3F9,&H0 ' ****** ^^^^
- 1530 OUT &H3FB,R1 ' reset DLAB to modem io
- 1540 RETURN
- 1550 GOTO 840
- 1560 HOUR = VAL( LEFT$(TI$,2))
- 1570 MIN = VAL( MID$(TI$,4,2))
- 1580 SEC = VAL( MID$(TI$,7,2))
- 1590 HH = VAL( LEFT$( TIME$ ,2))
- 1600 MM = VAL( MID$( TIME$ ,4,2))
- 1610 SS = VAL( MID$( TIME$ ,7,2))
- 1620 IF SEC < = SS THEN SSS = SS - SEC ELSE SSS = 60 - (SEC - SS) : MIN = MIN + 1
- 1630 IF MIN < = MM THEN MMM = MM - MIN ELSE MMM = 60 - (MIN - MM) : HOUR = HOUR + 1
- 1640 IF HOUR < = HH THEN HHH = HH - HOUR ELSE HHH = 24 - (HOUR - HH)
- 1650 GOSUB 810
- 1660 A$ = "It is now " + TIM$ + " " + DATE$
- 1670 GOSUB 840
- 1680 ACC# = HHH * 60 * 60 + MMM * 60 + SSS
- 1690 A$ = "You have been on for" + STR$(ACC#) + " seconds."
- 1700 GOSUB 840
- 1710 RETURN
- 1720 IF ERL = 70 AND ERR = 24 THEN RESUME 90
- 1730 IF ERL = 70 AND ERR = 55 THEN CLOSE #3 : RESUME 70
- 1740 IF ERL = 70 AND ERR = 57 THEN R1 = INP(&H3FD) : CLOSE 33 : RESUME 90
- 1750 IF ERL = 190 OR ERL = 200 THEN RESUME 190
- 1760 IF ( ERL = 510 AND NOT BIT.8) THEN OUT &H3FB,&H3 : RESUME 490
- 1770 IF ERL = 510 THEN RESUME 540
- 1780 IF ERL < 840 THEN RESUME 1880
- 1790 IF ERL = 910 AND ERR = 57 THEN R1 = INP(&H3FD) : RESUME 920
- 1800 IF ERL = 1230 OR ERL = 1970 THEN GOSUB 2040 : IF INP(&H3FE) < 127 THEN RESUME 1880
- 1810 IF ERL = 1230 THEN RESUME 1230
- 1820 IF ERL = 1960 THEN RESUME 1960
- 1830 IF 65535 = ERL THEN 1880
- 1840 IF ERR = 6 THEN 1880
- 1850 IF ERR = 5 THEN 1880
- 1860 IF ERR = 57 OR ERR = 24 OR ERR = 25 THEN GOSUB 2040 : R1 = INP(&H3FE) : IF R1 < 128 THEN RESUME 1880
- 1870 RESUME 1880
- 1880 CLOSE
- 1890 IF LOCAL THEN RETURN ELSE CLOSE #3 : OUT &H3FC,&H4 : GOSUB 2060 : GOSUB 2060 : OUT &H3FC,&H0
- 1900 END
- 1910 RETURN
- 1920 PRINT #3,"ATM1Q1E1S0=0C0H1M0"
- 1930 GOSUB 2060
- 1940 CLOSE #3
- 1950 RETURN
- 1960 WHILE NOT EOF(3)
- 1970 DUMMY$ = INPUT$( LOC(3),3)
- 1980 WEND
- 1990 RETURN
- 2000 IF NOT BIT.8 THEN GOSUB 2060 : OUT &H3FB,3
- 2010 IF LOCAL THEN RETURN
- 2020 IF INP(&H3FE) < 128 THEN 1880
- 2030 RETURN
- 2040 DELAY! = FN TI! + 1
- 2050 GOTO 2070
- 2060 DELAY! = FN TI! + 3
- 2070 IF FN TI! < DELAY! THEN 2070 ELSE RETURN
- 2080 PRT = NOT PRT
- 2090 RETURN
- 2100 REM *** add program here ***
- 2110 ' examples of io
- 2120 A$ = "What is your first name ? "
- 2130 GOSUB 1080
- 2140 A$ = "Your name is " + B$ + "(y/n)"
- 2150 GOSUB 1080
- 2160 CR = 1
- 2170 A$ = "Checking user file..."
- 2180 GOSUB 870
- 2190 FOR LOOP = 1 TO 10000
- 2200 NEXT LOOP
- 2210 A$ = "Ok; name found"
- 2220 GOSUB 870
- 2230 ' end my example
-